package com.zjl.redis.第05章_redis的多环境部署;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.*;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 *
 * 客户端  代理   三个主节点//8台主机  三主三从+客户端+代理
 *  一个集群至少要有三个主节点。//无中心化集群  只要6台  三主三从
 * 选项一 replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
 * "分配原则"尽量保证每个主数据库运行在不同的IP地址，
 * 每个从库和主库不在一个IP地址上。
 *
 *
 */
public class C6_java连接集群 {
    public static void main(String[] args) {
        Set<HostAndPort> nodes = new HashSet<>();//存储 Redis 连接信息
        nodes.add(new HostAndPort("127.0.0.1",6379));
        nodes.add(new HostAndPort("127.0.0.1",6380));
        nodes.add(new HostAndPort("127.0.0.1",6381));

        GenericObjectPoolConfig jedisPoolConfig = new JedisPoolConfig();
//        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(10);//最大可用连接数
        jedisPoolConfig.setMaxIdle(5);//最大闲置连接数
        jedisPoolConfig.setMinIdle(5);//最小闲置连接数
        jedisPoolConfig.setBlockWhenExhausted(true);//连接耗尽是否等待
        jedisPoolConfig.setMaxWaitMillis(2000);//等待时间 毫秒
        jedisPoolConfig.setTestOnBorrow(true);//取连接时进行ping pong测试

        //但可以重定向  所以一个也行但必须同意从定向
        JedisCluster cluster = new JedisCluster(nodes,jedisPoolConfig);
        Map<String, ConnectionPool> clusterNodes = cluster.getClusterNodes();
        cluster.set("1","1");
        cluster.close();//释放连接
    }
}
